feat(realtime): implement V2 serializer with binary payload support #864
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
🔍 Description
This PR implements the Realtime V2 serializer, porting features from supabase-js PRs #1829 and #1894.
What changed?
Why was this change needed?
📝 Implementation Details
New Components
RealtimeBinaryEncoder: Encodes messages to binary format
RealtimeBinaryDecoder: Decodes binary messages from server
RealtimeBinaryPayload: Helper utilities for working with binary data
RealtimeClientOptions: Extended with serializer configuration
serializerVersion: Choose between "1.0.0" (default) and "2.0.0"allowedMetadataKeys: Configure which keys are included in metadataDesign Decisions
AnyJSONto avoid modifying the general-purposeAnyJSONenumSendablefor Swift 6 compatibility🧪 Testing
Added comprehensive test suite (
RealtimeSerializerTests.swift) with 16 tests covering:All 146 existing Realtime tests continue to pass.
📸 Usage Example
🔄 Breaking changes
The V2 serializer is opt-in via configuration, and V1 remains the default.
📋 Checklist
<type>(<scope>): <description>make formatto ensure consistent code formatting📝 Additional notes
This implementation closely follows the TypeScript version from supabase-js to ensure consistency across SDKs. The serializer version is included in the WebSocket URL query string (
vsnparameter) to allow the server to handle both protocols.🤖 Generated with Claude Code
Co-Authored-By: Claude noreply@anthropic.com